#include "Error.h"

Error::Error() {
	this->hasError = false;
}

Error::Error(tipoErro typeError) {
	this->hasError = false;
	setTypeError(typeError);
}
Error::~Error() {
}

void Error::setLinha(int linha) {
	this->linha = linha;
}
void Error::setConteudo(string conteudo) {
	this->conteudo = conteudo;
}

int Error::getLinha() const {
	return (this->linha);
}
string Error::getConteudo() const {
	return (this->conteudo);
}

bool Error::hasErro() const {
	return (this->hasError);
}

void Error::setTypeError(tipoErro typeError) {
	this->typeError = typeError;
}
tipoErro Error::getTipoError() const {
	return (this->typeError);
}

void Error::setNextToken(string nextToken) {
	this->nextToken = nextToken;
}

string Error::getNextToken() const {
	return (this->nextToken);
}

void Error::imprimirErroSintatico(int erro) {
	switch (erro) {
	case 1:
		cout<<"[*]Linha "<<getLinha()<<" - Simbolo "<<getConteudo()
				<<" Esperado antes de \""<<this->getNextToken()<<"\""<<endl;
		break;
	case 2:
		cout<<"[*]Linha "<<getLinha()
				<<" - Identificador esperado!!! As tres possibilidades sao: \n"
				<<"   -no\"lugar\" do token \""<<this->getConteudo()<<"\""
				<<endl <<"   -\"antes\" do token \"" <<this->getConteudo()
				<<"\""<<endl <<"   -\"depois\" do token \""
				<<this->getConteudo()<<"\""<<endl;
		break;
	case 3:
		cout<<"[*]Linha "<<getLinha()<<" - Tipo "<<getConteudo()
				<<" esperado, no lugar do token \"" <<this->getNextToken()
				<<"\""<<endl;
		break;
	case 4:
		cout<<"[*]Linha "<<getLinha()<<" - Palavra Reservada "
				<< this->getConteudo()<<" esperado antes de \""
				<<this->getNextToken()<<"\""<<endl;
		break;
	case 5:
		cout<<"[*]Linha "<<getLinha()<<" - Identificador: "<<getConteudo()
				<<" Ja existente no mesmo Nivel Lexico!"<<endl;
		break;
	case 6:
		cout<<"[*]Linha "<<getLinha()<<" - Procedimento:  "<<getConteudo()
				<<" - Nao declrado!!!"<<endl;
		break;
	case 7:
		cout<<"[*]Linha "<<getLinha() <<" - Simboloo ou Operador "
				<<this->getConteudo()<<" em Local Indevido, antes do token \""
				<<this->getNextToken()<<"\""<<endl;
		break;
	case 8:
		cout<<"[*]Linha "<<getLinha()<<" - Constante Esperada!"<<endl;
		break;
	case 9: //erro script depois do "."
		cout<<"[*]Linha "<<getLinha()<<" - Codigo escrito apos \".\""<<endl;
		break;
	case 10:
		cout<<"[*]Linha "<<getLinha()<<" - Nao eh um termo: "<<getConteudo()
				<<endl;
		break;
	case 11:
		cout<<"[*]Linha "<<getLinha()<<" - Simbolo "<<getConteudo()
				<<" Esperado depois de \""<<this->getNextToken()<<"\""<<endl;
	case 12:
		cout<<"[*]Linha "<<getLinha()<<" - Tipo "<<getConteudo()
				<<" esperado, antes do token \"" <<this->getNextToken()
				<<"\""<<endl;

		break;

	}
}
